#pragma once
#include "./User.hpp"

/***
 * 该模块涉及到简单的用户的注册、注销、获取用户信息、用户的登陆状态、消息记录的管理
 */
class UserModule
{
public:
    using Ptr = std::shared_ptr<UserModule>;

    UserModule(const MySQLHelper::Ptr& mysql_helper) 
        : usermanager(std::make_shared<UserManager>(mysql_helper))
    {}

    // 用户注册
    bool userRegister(const std::string &name, const std::string &id, const std::string &password,
                      const std::string &sessionid, const std::string &head = defaulthead)
    {
        return usermanager->addUser(name, id, password, sessionid, head);
    }

    // 用户登入
    Code userLoging(const std::string &id, const std::string &password)
    {
        return usermanager->userLoging(id, password);;
    }

    // 用户登出
    void userLoginout(const std::string &id)
    {
        usermanager->userLogout(id);
    }

    // 用户注销
    bool userLogOff(const std::string &id)
    {
        usermanager->delUser(id);

        return true;
    }

    // 获取用户
    User::Ptr getUser(const std::string &id)
    {
        return usermanager->getUser(id);
    }

    ~UserModule() {}

private:
    UserManager::Ptr usermanager;
};